package lesson03;

import java.sql.*;

public class testJDBC {
    public static void main(String[] args) {
        // 定义数据库连接信息
        String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull";
        String username = "root";
        String password = "123456";

        // 定义 SQL 查询语句
        String sql = "SELECT * FROM test_table";

        try {
            // 加载 JDBC 驱动程序
            /* 这一步就是创建DriverManager.registerDriver(new Driver()); 这段代码就是这个类的静态代码块，我们直接加载该类就可以了。
               示例中使用的（com.mysql.jdbc.Driver）是旧版的 MySQL JDBC 驱动程序。从 MySQL 8.0 版本开始，推荐使用新的驱动程序类 com.mysql.cj.jdbc.Driver
               新版的 MySQL 驱动程序通过 SPI（Service Provider Interface）自动注册，不再需要手动加载驱动程序类。
               这意味着在建立数据库连接时，不再需要调用 Class.forName("com.mysql.cj.jdbc.Driver") */
            Class.forName("com.mysql.jdbc.Driver");

            // 建立数据库连接
            Connection connection = DriverManager.getConnection(url, username, password);

            // 创建 PreparedStatement 对象  防止sql注入且效率更高
            // 防止sql注入的本质就是把传入的参数当作字符传递，遇见转义字符就忽略.
            PreparedStatement statement = connection.prepareStatement(sql);

            // 执行查询
            ResultSet resultSet = statement.executeQuery(sql);

            // 处理查询结果
            while (resultSet.next()) {
                String test1 = resultSet.getString("test1");
                String makeLendingTime = resultSet.getString("MAKE_LENDING_TIME");
                String isRepayLending = resultSet.getString("IS_REPAY_LENDING");

                System.out.println("test1: " + test1 + ", makeLendingTime: " + makeLendingTime + ", isRepayLending: " + isRepayLending);
            }

            // 执行更新
            sql = "UPDATE test_table set test1 = ? where IS_REPAY_LENDING = ?";
            // 创建 PreparedStatement 对象  防止sql注入且效率更高
            PreparedStatement statement1 = connection.prepareStatement(sql);
            // 赋值
            statement1.setString(1,"1");
            statement1.setString(2,"2");
            //执行
            statement1.executeUpdate();

            // 关闭连接
            resultSet.close();
            statement.close();
            statement1.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}
